// pages/cart/index.js
/*
获取 用户 对小程序 所授予 获取地址的 权限 状态 scope
  假设 用户 点击获取收货地址的提示框 确定 authSetting scope.address: true
  假设 用户 点击取消收货地址的提示框 取消 authSetting scope.address: false
  假如 用户 没有调用过收货地址的提示框 authSetting scope.address: 空
*/
import { getSetting, chooseAddress, openSetting, showModal, showToast } from "../../utils/asyncWc.js";

Page({
  data: {
    address: {},
    cart: [],
    allChecked: false,
    totalPrice: 0,
    totalNum: 0
  },
  onShow () {
    // 获取缓存中的收货地址信息
    const address = wx.getStorageSync("address")
    // 获取缓存中的购物车数据
    const cart = wx.getStorageSync("cart")||[]
    // 计算全选
    // every 数组方法 会遍历 接收一个回调函数 每个回调函数都返回true 才为true 否则返回false
    this.setData({address})
    this.setCart(cart)
  },
  // 点击收获地址
  async handleChooseAddress () {
    // 获取 权限状态
    try{
      const res1 = await getSetting()
      const scopeAddress = res1.authSetting["scope.address"]
      // 判断权限状态
      if (scopeAddress===false) {
        await openSetting()
      }
      // 调用收货地址api
      let address = await chooseAddress()
      address.all = address.provinceName+address.cityName+address.countyName+address.detailInfo
      wx.setStorageSync("address", address)
    }catch(error){
      console.log(error)
    }
  },
  // 商品的选中
  handleItemChange (e) {
    const goods_id = e.currentTarget.dataset.id
    // 获取购物车数组
    let {cart} = this.data
    // 找到被修改的商品对象
    let index = cart.findIndex(v=>v.goods_id===goods_id)
    // 取反
    cart[index].checked =! cart[index].checked
    this.setCart(cart)
  },
  // 设置购物车转态同时 重新计算 底部工具栏数据 全选 总价格 购买数量
  setCart (cart) {
    // 总价格 总数量
    let allChecked = true
    let totalPrice = 0
    let totalNum = 0
    cart.forEach(v => {
      if (v.checked) {
        totalPrice += v.num * v.goods_price
        totalNum += v.num
      }else{
        allChecked = false
      }
    })
    // 判断数组是否为空
    allChecked = cart.length!=0 ? allChecked : false
    // 给data赋值
    this.setData({
      cart,
      allChecked,
      totalPrice,
      totalNum
    })
    wx.setStorageSync("cart", cart)
  },
  // 商品全选功能
  handleItemCheck () {
    let {cart,allChecked} = this.data
    allChecked =! allChecked
    cart.forEach(v=>v.checked = allChecked)
    this.setCart(cart)
  },
  // 商品数量的编辑
  async handleItemNumEdit (e) {
    const {operation,id} = e.currentTarget.dataset
    let {cart} = this.data
    const index = cart.findIndex(v=>v.goods_id===id)
    // 用户点击到num：1时 判断是否有进行删除
    if (cart[index].num===1&&operation===-1){
      // 弹窗提示是否要删除
      const res = await showModal({content:"您是否要删除该商品?"})
      if (res.confirm) {
        cart.splice(index,1)
        this.setCart(cart)
      }
    }else{
      // 进行修改
      cart[index].num += operation
      this.setCart(cart)
    }
  },
  // 点击 结算
  async handlePay () {
    // 判断是否有收货地址
    const {address,totalNum} = this.data
    if (!address.userName) {
      await showToast({title:"你还没有选择收货地址"})
      return
    }
    // 2 判断是否有商品
    if (totalNum===0) {
      await showToast({title:"你还没有选购商品"})
      return
    }
    wx.navigateTo({
      url: '/pages/pay/index'
    })
  }
})